/*
 * @Author: Creator
 * @Date: 2020-10-05 00:26:22
 * @LastEditors: Creator
 * @LastEditTime: 2020-10-09 15:29:55
 * @Description: file content
 */
#ifndef HOSPITAL_H
#define HOSPITAL_H


#include "mytime.h"
#include "patient.h"
#define Origin 0
// 住院记录
typedef struct HospitalRecord
{
    //HsptRecNode *patient; // 患者信息指针，指向患者数据库
    char patientid[19]; // 患者身份证号
    Date in;        // 住院时间
    Date preout;    // 出院时间
    float deposit;  // deposit 押金
    //  int room;       // 病房编号？是否有必要？
} HsptRecord;  
// 住院记录表
typedef struct HospitalRecordList
{
    HsptRecord data;        // 数据域
    struct HospitalRecordList *pre;
    struct HospitalRecordList *next;
} HsptRecNode;
// 该结构体是否在这里使用 NO？？ YEs？
// Date LastUpdateTime;        // 全局变量， 上次更新时间， 我认为只需要一个就够了
// Date NowTime;               // 全局变量， 系统登录时间
// float HospitalIncome;       // 全局变量， 住院收入
// const Nature RoomTotal = 50;// 全局常量， 病房总数
// Nature RoomNow;             // 全局变量， 当前病房数
// HsptRecNode *HsptRecList;   // 全局变量， 住院信息链表
// Nature PatientInHsptNum;    // 全局变量， 住院患者总数， 即 住院记录数

HsptRecNode* readAHsptRecNode(FILE* fp);                                         // 加载单个住院信息
HsptRecNode* loadHsptRecNodeList();                                            // 加载住院信息链表
HsptRecNode* createNullHsptRecNode();     
// HsptRecNode* findPatient(PatientNode* patient);                                        // 创建空节点用于存储信息
bool writeAHsptRecNode(FILE* fp,HsptRecNode* hsptrecord);                         // 写入住院信息
bool writeHsptRecNodeList();                            // 写入住院链表

bool newHsptPatient(PatientNode* patient, Date in, float deposit);  // 增加一条新的住院记录

bool updateIncome();        // 更新押金与住院收入


bool updateHspt();          // 根据当前时间 更新住院系统
//bool outHspt(PatientNode* patient); // 出院
bool outHspt(HsptRecNode* outNode);     //出院
int displayPreOut();       // 显示待出院患者列表， 均为押金不足1000,并返回押金不足1000人数

bool outOrPay();            // 显示押金不够的患者，并要求缴纳或者出院
bool pay(HsptRecNode* topay);   // 待缴费患者缴费

void displayAllRecord();


#endif //HOSPITAL_H